#!/bin/bash

# AIDE 生产环境部署脚本 - Ubuntu Server版本
# 使用方法：chmod +x deploy-ubuntu.sh && ./deploy-ubuntu.sh

set -e  # 遇到错误立即退出

echo "🚀 开始部署AIDE生产环境..."

# 检查是否为root用户或有sudo权限
if [[ $EUID -ne 0 ]] && ! sudo -n true 2>/dev/null; then
    echo "❌ 此脚本需要root权限或sudo权限"
    exit 1
fi

# 检查必要的环境变量文件
if [ ! -f .env.prod ]; then
    echo "❌ 错误：未找到 .env.prod 文件"
    echo "请先创建 .env.prod 文件并配置以下变量："
    echo "DB_PASSWORD=your_secure_db_password"
    echo "JWT_SECRET=your_super_secret_jwt_key"
    echo "OPENAI_API_KEY=your_openai_api_key"
    echo "REDIS_PASSWORD=your_redis_password"
    echo "CORS_ORIGIN=https://yourdomain.com"
    echo "SMTP_HOST=your_smtp_host"
    echo "SMTP_PORT=587"
    echo "SMTP_USER=your_smtp_user"
    echo "SMTP_PASS=your_smtp_password"
    exit 1
fi

# 检查Docker是否已安装
if ! command -v docker &> /dev/null; then
    echo "❌ Docker 未安装，请先安装 Docker"
    exit 1
fi

# 检查Docker Compose是否已安装
if ! command -v docker-compose &> /dev/null; then
    echo "❌ Docker Compose 未安装，请先安装 Docker Compose"
    exit 1
fi

# 创建必要的目录
echo "📁 创建数据存储目录..."
sudo mkdir -p /var/lib/aide/postgres
sudo mkdir -p /var/lib/aide/redis
mkdir -p ./logs
mkdir -p ./ssl
mkdir -p ./nginx/logs

# 设置目录权限
echo "🔐 设置目录权限..."
sudo chown -R 999:999 /var/lib/aide/postgres
sudo chown -R 999:999 /var/lib/aide/redis
sudo chmod -R 755 /var/lib/aide

# 停止现有容器（如果存在）
echo "🛑 停止现有容器..."
docker-compose -f docker-compose.prod.yml -f docker-compose.linux.yml --env-file .env.prod down 2>/dev/null || true

# 清理旧的镜像（可选）
echo "🧹 清理旧镜像..."
docker image prune -f

# 拉取最新镜像
echo "📥 拉取最新镜像..."
docker-compose -f docker-compose.prod.yml -f docker-compose.linux.yml --env-file .env.prod pull

# 构建并启动服务
echo "🏗️ 构建并启动服务（Linux环境）..."
docker-compose -f docker-compose.prod.yml -f docker-compose.linux.yml --env-file .env.prod up --build -d

# 等待服务启动
echo "⏳ 等待服务启动..."
sleep 30

# 检查服务状态
echo "🔍 检查服务状态..."
docker-compose -f docker-compose.prod.yml -f docker-compose.linux.yml --env-file .env.prod ps

# 检查健康状态
echo "❤️ 检查服务健康状态..."
echo "检查后端健康状态..."
docker-compose -f docker-compose.prod.yml --env-file .env.prod exec -T backend curl -f http://localhost:5000/health || echo "⚠️ 后端健康检查失败"

echo "检查前端健康状态..."
docker-compose -f docker-compose.prod.yml --env-file .env.prod exec -T frontend curl -f http://localhost/health || echo "⚠️ 前端健康检查失败"

# 显示容器日志（最后20行）
echo "📋 最近日志："
docker-compose -f docker-compose.prod.yml --env-file .env.prod logs --tail=20

echo ""
echo "✅ 部署完成！"
echo "🌐 访问地址: http://$(curl -s ifconfig.me 2>/dev/null || echo 'your-server-ip')"
echo ""
echo "📊 常用命令："
echo "  查看日志: docker-compose -f docker-compose.prod.yml --env-file .env.prod logs -f"
echo "  重启服务: docker-compose -f docker-compose.prod.yml --env-file .env.prod restart"
echo "  停止服务: docker-compose -f docker-compose.prod.yml --env-file .env.prod down"
echo "  进入后端: docker-compose -f docker-compose.prod.yml --env-file .env.prod exec backend sh"
echo "  进入前端: docker-compose -f docker-compose.prod.yml --env-file .env.prod exec frontend sh"
echo ""
echo "🔧 如果需要查看实时日志，请运行："
echo "docker-compose -f docker-compose.prod.yml --env-file .env.prod logs -f"